/*
    SUSAN® - Sole of Unix Save ANything

   Copyright (C) 2020-2020 Hechzh Property

   
*/

#include "include/susan.h"
#include "dird/dbcopy/database_export.h"
#include "dird/dbcopy/database_export_postgresql.h"
#include "dird/dbcopy/database_table_descriptions.h"

#include <memory>

DatabaseExport::DatabaseExport(const DatabaseConnection& db_connection)
    : db_(db_connection.db)
    , table_descriptions_(DatabaseTableDescriptions::Create(db_connection))
{
  return;
}

DatabaseExport::~DatabaseExport() = default;

std::unique_ptr<DatabaseExport> DatabaseExport::Create(
    const DatabaseConnection& db_connection,
    DatabaseExport::InsertMode mode,
    bool clear_tables)
{
  switch (db_connection.db_type) {
    case DatabaseType::Enum::kPostgresql:
      return std::make_unique<DatabaseExportPostgresql>(db_connection, mode,
                                                        clear_tables);
    default:
    case DatabaseType::Enum::kMysql:
      throw std::runtime_error(
          "DatabaseExport: Database type unknown or not implemented");
  }
}
